package cn.iocoder.yudao.module.peizhen.service.hospital;

import java.util.*;
import javax.validation.*;
import cn.iocoder.yudao.module.peizhen.controller.admin.hospital.vo.*;
import cn.iocoder.yudao.module.peizhen.controller.app.hospital.vo.AppHospitalPageReqVO;
import cn.iocoder.yudao.module.peizhen.dal.dataobject.hospital.HospitalDO;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.module.peizhen.dal.dataobject.hospital.SectionDO;

/**
 * 医院 Service 接口
 *
 * @author 芋道源码
 */
public interface HospitalService {

    /**
     * 创建医院
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Integer createHospital(@Valid HospitalSaveReqVO createReqVO);

    /**
     * 更新医院
     *
     * @param updateReqVO 更新信息
     */
    void updateHospital(@Valid HospitalSaveReqVO updateReqVO);

    /**
     * 删除医院
     *
     * @param id 编号
     */
    void deleteHospital(Integer id);

    /**
     * 获得医院
     *
     * @param id 编号
     * @return 医院
     */
    HospitalDO getHospital(Integer id);

    /**
     * 获得医院分页
     *
     * @param pageReqVO 分页查询
     * @return 医院分页
     */
    PageResult<HospitalDO> getHospitalPage(HospitalPageReqVO pageReqVO);

    // ==================== 子表（医院科室） ====================

    /**
     * 获得医院科室分页
     *
     * @param pageReqVO 分页查询
     * @param hospitalId 医院id
     * @return 医院科室分页
     */
    PageResult<SectionDO> getSectionPage(PageParam pageReqVO, Integer hospitalId);

    /**
     * 创建医院科室
     *
     * @param section 创建信息
     * @return 编号
     */
    Integer createSection(@Valid SectionDO section);

    /**
     * 更新医院科室
     *
     * @param section 更新信息
     */
    void updateSection(@Valid SectionDO section);

    /**
     * 删除医院科室
     *
     * @param id 编号
     */
    void deleteSection(Integer id);

	/**
	 * 获得医院科室
	 *
	 * @param id 编号
     * @return 医院科室
	 */
    SectionDO getSection(Integer id);


//    app

    /**
     * 获得医院分页
     *
     * @param pageReqVO 分页查询
     * @return 医院分页
     */
    PageResult<HospitalDO> getHospitalPage(AppHospitalPageReqVO pageReqVO);

}